//#include "exam.h"
#include <QCoreApplication>
#include <qprocess.h>
#include<qfileinfo.h>
#include<qdebug.h>
#include<stdio.h>
#include<iostream>
using namespace std;
/***
 * -------------------------------------------------------------------------------------------------------------------
 * 题目
 * -------------------------------------------------------------------------------------------------------------------
 *
 * 编写一个程序，从命令行读取一个软件包的名称，调用“dpkg -L”命令获得该软件包的文件列表，并检查所有文件。
 * 要求：
 * 1. 使用cmake和c++开发
 * 2. 可执行文件名称和位置是./src/pkgverify
 * 3. 检查该软件包所有文件，确认：
 *   - 路径存在
 *   - 文件存在
 *   - 如果是符号链接，链接的文件也存在
 *   - /usr路径下的文件，确认文件属主都是root
 * 4. 输出所有有问题的文件或路径名
 * 
 * 示例：
 * 如果/etc/cups路径被删除了，则运行结果如下：
 * pkgverify cups
 * /etc/cups
 * /etc/cups/snmp.conf
 * 
 */
 
int main(int argc, char *argv[])
{
    QProcess p;
    p.start(QString("dpkg -L ")　+ argv[1]);
    p.waitForFinished();
    QString str = p.readAllStandardOutput();
    QStringList pathlist = str.split("\n");


    foreach(QString path,pathlist)
    {
        if(path.isEmpty()){
            continue;
        }
        QFileInfo info(path);
        if(info.isSymLink()){
            if(!QFileInfo::exists(info.symLinkTarget())){
                std::cout<<info.symLinkTarget().toStdString() << std::endl;
                continue;
            }
        }

        if(!QFileInfo::exists(path)){
            std::cout<<path.toStdString() << std::endl;
            continue;
        }

        if(path.contains("/usr")){
            if(info.owner() != "root"){
                std::cout<<path.toStdString() << std::endl;
                continue;
            }
        }

    }

    return 0;
}

